package services

import (
	"errors"
	"go-mp-starter/app/common/request"
	"go-mp-starter/app/models"
	"go-mp-starter/global"
	"go-mp-starter/utils"
	"strconv"

	"gorm.io/gorm"
)

type userService struct{}

// UserService 用户业务逻辑服务实例
var UserService = new(userService)

// Register 用户注册操作
func (usv *userService) Register(params request.Register) (user *models.User, err error) {
	ginDb := global.App.DB
	var result = ginDb.Where("mobile=?", params.Mobile).Select("id").First(&models.User{})
	if result.RowsAffected != 0 {
		err = errors.New("手机号已存在")
		return
	}
	user = &models.User{
		Name:     params.Name,
		Mobile:   params.Mobile,
		Password: utils.MakeBcrypt([]byte(params.Password)),
	}
	// 注意使用指针
	err = ginDb.Create(user).Error
	return
}

// Login 用户登陆操作
func (usv *userService) Login(params request.Login) (user *models.User, err error) {
	ginDb := global.App.DB
	err = ginDb.Where("mobile=?", params.Mobile).First(&user).Error

	if err != nil || !utils.CheckBcrypt([]byte(params.Password), user.Password) {
		err = errors.New("手机号不存在或密码不正确")
	}
	return
}

// GetUserInfo 获取用户信息
func (usv *userService) GetUserInfo(id string) (user *models.User, err error) {
	intId, err := strconv.Atoi(id)
	if err != nil {
		err = errors.New("Id不合法")
		return
	}
	err = global.App.DB.First(&user, intId).Error
	if err == gorm.ErrRecordNotFound {
		err = errors.New("用户不存在")
		return
	}
	if err != nil {
		global.App.Log.Error("dbError: " + err.Error())
		err = errors.New("数据库错误")
		return
	}
	return
}
